package io.yunho.yunho.interview.one.fatherandson;

/**
 * @author: Jason
 * @date: 2021/3/9 8:42
 * @description:
 * 子类初始化<clinit>:
 * (1)静态变量显示赋值代码 method()
 * （2）静态代码块
 *
 * 初始化主类需要先初始化父类
 * 子类实例化 <init>
 *  (1) supper 首行（最前）
 *  (2) i = test();
 *  (3) 子类非静态代码块
 *  (4)子类无参构造器（最后）
 *
 *  因为创建两个Son实例，因此子类Son的<init>方法执行两遍
 */
public class Son extends Father {
    private int i = test();
    private static int j = method();

    static {
        System.out.println("06 static run");
    }
    Son(){
//        super();写或不写 都存在 子类构造器一定会调用父类构造器
        System.out.println("07 Son run");
    }
    {
        System.out.println("08 unstatic run");
    }
    public static int method() {
        System.out.println("10 method run");
        return 1;
    }

    public int test() {
        System.out.println("09 test run return 1");
        return 1;
    }

    public static void main(String[] args) {
        Son s1 = new Son();
        System.out.println();
        Son s2 = new Son();
    }
}
